查看原文
其他

章文嵩:开源释疑十五问

CCF ODC CSDN程序人生 2024-01-17
出处|CCF开源发展委员会

编者按:开源正在全世界蓬勃开展,在中国也如星星之火,开始呈现燎原之势。但开源毕竟在中国的推广还不广泛,大家依然对开源有不少疑惑。为此,CCF开源发展委员会副主任章文嵩博士,根据自己在开源领域30多年的经验,回答了经华为贾岩涛博士收集整理的十五个开源领域的重要问题,帮助大家理解开源、拥抱开源、推动开源。

声明:本文为CSDN转载,已获得作者授权。

照片来源:CSDN 采访文嵩博士时所拍摄


开源与商业逻辑


业界开源软件和商业逻辑有哪些常见的闭环方式(或商业模式),看似不赚钱的开源项目背后,有怎样的商业逻辑?如何决策软件是否开源,什么样的软件形式或产品改走开源路径,基础软件该走哪条路径?

第一问:业界开源软件和商业逻辑有哪些常见的闭环方式(或商业模式)?

常见的商业模式主要包括以下几类:

1. 专业支持和服务:开源软件供应商提供额外的服务和支持,如培训、咨询、定制协议等,为企业用户提供更好的使用体验和技术支持。像Red Hat提供Linux发行版和版本升级服务等。

2. 对应用程序接口(API)的访问管理:开源软件供应商提供用于访问其已经部署服务的API,为企业用户提供易于使用和管理的功能。提供API访问的服务可以算PaaS,像Kafka开源软件背后的Confluent就提供Kafka的PaaS服务。

3. 增值功能和扩展软件的销售:开源软件供应商提供额外的功能或软件增值功能的许可证,开源软件本身有可插拔的架构方便私有化部署,为企业用户提供更高级别的功能;另一种方式开源软件供应商提供PaaS或SaaS云服务时,有增值功能和扩张软件的选择。大部分开源的PaaS或SaaS服务商都选用这个模式。

4. 版权许可证的管理:开源软件供应商通过一些开源许可证,让企业用户付费可以合法地使用和修改开源软件。


第二问:看似不赚钱的开源项目背后,有怎样的商业逻辑?

尽管一些开源项目并没有直接带来收益,但许多企业还是乐意投资开源项目的原因如下:

1. 为了推广公司品牌:通过为大量开发人员提供有用的开源工具和软件,企业可以增强其品牌价值和普及度。

2. 为了招聘人才:开源项目是包容和吸引人才的方法之一。企业可以通过开源项目展示自己的技术实力和开放文化,能吸引到更多的优秀人才。

3. 为了获取反馈和改进产品:开源项目为企业提供了获取用户反馈和改进产品的途径,将产品开源后,更容易获得社区用户的建议和意见。

4. 构建开源生态提高获客效率:通过开源项目构建开源生态,形成事实的标准,一部分开源软件的用户为了降低运维成本使用商业服务,外围更多的潜在客户慕名来采购商业服务,会大大提高获客的效率。


第三问:如何决策软件是否开源,什么样的软件形式或产品该走开源路径,基础软件该走哪条路径?

决定是否开源软件通常思考开源带来的好处和坏处,若好处大于坏处,那应该选择开源。软件开源的好处有经济因素考虑,开发效率更高,构建开源生态提高获客效率,增强品牌和吸引人才等,也有社会价值的考虑,开源软件开放共享可以丰富人类社会的公共资产;坏处是外部用户可以无偿使用开源软件,竞争对手也可能会使用这个开源软件,可以通过开源策略和开源许可证把坏处降到最低,例如只开源核心部分能解决一些场景,更多场景需要购买增值服务才能完成,开源许可证让企业为第三方提供商业服务需要付费。

基础软件通常更适合开源,因为这样可以在更广泛地范围内获得使用并扩展和改进,更容易获得客户的信任把开源基础软件集成到自己的系统中。在当今社会中,若新的基础软件还以闭源方式来开展,对客户来说是个黑盒子,不知道是否存在安全问题,出了问题只能等待供应商来解决,时间不可控,我想大部分客户都不会接受新的闭源基础软件。


第四问:国内开源社区应该如何做好生态,目前企业和社区基本都是基于各自商业利益,而高校参与社区是能从中获取经费,如何调动大家的积极性投入开源社区贡献开源?

开源社区的生态建设非常重要,它可以凝聚各方力量,促进创新,加速技术发展,提高开源软件质量等。首先,作为开源项目的发起人需要不遗余力地投入到开源社区生态建设中,把一个项目开源出来只是万里长征的第一步,后续需要花十万分精力投入到开源项目和社区的发展中,回答用户的问题,倾听用户的需求,改进开源软件,更加开放的心态吸收来自外部开发者的贡献,一定要把荣誉给用户和外部开发者,不断地吸引更多的用户和外部开发者到开源项目中来,人多了社区就起来了,所以,发起人是开源项目的第一责任人,对开源项目要做到“管生也管养”。开源社区建设的具体操作建议如下:

1.吸引用户:一定要讲清楚自己开源软件的价值和定位,帮用户解决什么问题,能吸引用户的关注进而有兴趣动手用一用;编写好的快速开始文档QuickStart,用户安排QuickStart中的几个步骤做下来,开源软件是可以工作的,这非常重要,用户第一次就能把它运行起来,后续用户碰到任何问题,他/她会先怀疑是自己搞错了,自己查配置甚至看程序来修复问题,若第一次都运行不起来,绝大部分用户包括我自己头都不回走了,我去玩玩别的开源软件好了;在讨论区或邮件列表中,要积极回答用户的各种问题,帮助用户解决问题,让用户感觉到这是活跃开发的开源项目;寻找各种渠道来宣传开源项目。吸引用户来使用,是开源项目最基本的工作,有了足够多的用户,就会有一定比例的开发者冒出来,这样就能逐步形成开源社区。

2.认可外部贡献:要认可用户提出好的需求,好的需求比代码实现更重要;外部开发者寄来一个patch或pull request,若这个修改并不伤害到整体,应该接受和认可,哪怕你把整个patch都重写了,也要认可别人的贡献;把贡献者的大名写到开源文件中或源代码文件中。这个过程中把更多荣誉(credit)归给他人,就能凝聚更多的人在开源社团中,就像“钱散人聚”的公司是有凝聚力和战斗力的组织,在开源社区上,我们不分钱更多把荣誉分给大家。

3.培育社区文化:做好前面两点,就逐步建立一个基于合作、开放和共享的社区文化,鼓励用户、开发者和贡献者分享知识和经验,大家相互认可,共同建设社区。

4.接纳商业化:要以开放的心态接纳其他企业使用开源软件做商业化服务,他们做商业化也会帮忙推广开源软件,商业化成功后会回馈社区,也说明这个开源软件的价值。商业化的市场是足够大,作为开源软件项目的发起人,若对商业化感兴趣,有很大的优势来作商业化。


第五问:如何看待国内数据库厂商五花八门的开源模式,他们哪种模式更有生命力,甚至最终胜出?OS行业中哪些方面该开源协作、哪些该竞争,从而形成最有利于行业发展和客户利益的格局?

我想国内数据库厂商的开源模式,主要有纯开源、开核心代码、开源社区版本三种形式,再运用不同的开源许可证有不同的约束。哪种模式更有生命力和最终胜出,我觉得主要看开源社区的繁荣度,开源版本能不能解决用户的痛点创造价值,吸引更多用户和贡献者,形成开源生态,同时开源生态和商业化是相辅相成的。若它们不能形成好的开源生态,即使商业化成功,它们开源本身也是没有意义的。

在OS行业拿服务器操作系统来说,国内主要有三家,华为的OpenEuler发行版、阿里的龙蜥发行版和腾讯的OpenCloudOS发行版,这三家可以说在开发服务器操作系统上是最有实力的,但相互间不合作,是挺可惜的,维护上游开源软件的版本更新、补丁和测试等对三家来说都是要做的重复工作,对整个国家来说是挺大的人才资源浪费。我觉得在服务器操作系统的基础发行版上三家公司可以通过开源来协作,不是哪家公司来主导,而是通过开源社区治理来协作,每个特别兴趣组SIG的负责人是由社区成员选举出来的,技术委员会成员也是通过社区选择出来的。公司可以在基础发行版上提供附加软件包,靠一定的差异化和技术服务支持来赢得客户。若三家不能马上合作,至少两家可以先合作起来。


开源软件的竞争力


第六问:对于大公司主导的开源社区和产品,如何确保外部贡献的代码质量和对齐技术路线的同时,最大可能吸引外部贡献者?外部贡献者可能不是社区的长期贡献者,如何看待外部贡献代码的后续维护和功能演进问题?

我觉得要用开放和包容的心态来接纳外部贡献者。不要有这样的心态:外部贡献的代码质量不如内部,外部贡献的规划不如内部技术路线的规划。有可能部分外面贡献者的代码质量远超过内部的,外部贡献者的技术规划会让内部同学眼睛一亮。开放和包容的心态决定行为,从心底里接纳外部贡献者,就能吸引到更多的外部贡献者,外部贡献者认为自己是社区的一员,一些外部贡献者就会成为长期贡献者。


第七问:对于领先的软件产品,选择开源会使其竞争力迅速被拉平,虽说存在先发优势,但的确容易被复制。如何维持开源软件的竞争力,或者如何看待软件的竞争力?当客户需要软件开源才愿意使用,而我们又担心软件竞争力快速流失的情况下,业界应对开源诉求和竞争力流失的矛盾上,有什么有效经验可借鉴?

我觉得不用太担心开源导致软件竞争力流失的问题,开源软件的竞争力主要在于其的社区生态建设和用户体验,开源可以让软件迭代得更快,更好地满足客户需求。人们对开源软件原作者的认可度远远超过该软件的其他商业服务商,原作者肯定可以获得最大一块的商业价值。

若真的很担心其他竞争对手在该开源软件上获得很大的价值,可以在开源许可证上限制竞争对手利用该开源软件对第三方提供商业服务,但这是双刃剑,因为这样比较封闭的开源许可证,所有的好处都被原作者拿走,外部开发者会离远远的,不利于开源社区的建设。

现在是云服务的时代,越来越多客户选择云服务,因为使用门槛低,性价比高,按量付费。软件私有化部署因为学习、搭建和运维的成本高昂,初始建设的投资大,其市场会越来越小。所以,应该利用开源构建生态,在云服务上更高效地获得最大的商业价值。


开源贡献和治理


第八问:开源社区是否应该排名,如果需要,该谁来排、怎么排(如何构建排名规则)?

我觉得需要排名,可以反映人们对开源项目的认可度,和提高人们对开源项目的关注度,但构建排名规则需要公正性、客观性和透明性。排名应该由一个中立的开源组织或平台来进行,而不是由某个公司或个人来进行。排名规则应该基于一系列评估标准,例如代码质量、功能完整性、用户体验、社区活跃度等因素。排名规则和评分过程都应该是透明的。


第九问:如何让开源社区更活跃,让开源社区竞争力更强?开源社区健康运营需要怎么样的基础设施和能力?

开源项目的发起人是开源社区建设的第一负责人,如何建设开源社区在前面的问答中有具体的建议。从这些举措中,我们可以得出开源社区健康运营需要以下的基础设施和能力,需要有愿景和凝聚大家的技术领导人,良好的文档和开发测试环境让用户很容易上手,得到大家认同的社区管理,好的代码管理确保代码质量和所发布版本的稳定性。


第十问:公司发起的开源项目捐赠后,公司的持续投入策略应该依据哪些方面进行制定和决策?捐赠后,为了保证开源项目的成功,从业界经验和教训看,公司的投入策略有哪些关键点?

公司的持续投入策略应该依据以下方面进行制定和决策:

1.公司的长期战略规划:决定公司在开源项目中的角色和目标。

2.项目的重要性和发展潜力:开源项目的重要性和发展潜力将直接影响公司的投入策略,尤其开源项目具有战略意义或者有望成为行业标准时,公司会更愿意进行投入。

3.开源项目的生态系统:开源项目的生态系统将决定公司在其中的地位和影响力,公司长远能从生态系统中获益。

这些评价的维度很多是定性的,而不是定量的,所以需要管理层对开源理念和开源所带来的价值有很好的认同。

在公司持续一贯的开源战略下,为了保证开源项目的成功,投入策略的关键点主要是人,公司应该投入能自我驱动、真正对开源感兴趣的核心开发人员和项目管理人员,让他们无后顾之忧地投入开源项目中,然后就看他们能不能倾听外部的反馈,凝聚外部贡献者,构建开源生态。

商业产品对开源组件的合理使用


第十一问:Linux内核社区在今年3月14日拒绝了来自俄罗斯贝加尔湖电子(英国制裁名单)提交的CPU使能特性,如何看待开源软件的供应受到政治影响和限制的威胁?开源社区本身有没有相关的措施抵制政治因素干扰?

我觉得不应该这么做,Linux是全世界人的财富,全世界人都可以使用Linux和为之贡献,只要开发的特性是能对大部分用户有好处的,就应该接纳,Linux开源发展跟国家政治没有关系。Linux内核Stable Branch维护者 Greg Kroah-Hartman 在一个邮件列表中明确表示,该补丁并非技术上存在任何问题,但贝加尔湖电子公司被列入英国的制裁名单,因此不能接受他们的贡献。这种做法是为了遵守国际法律和尊重英国政府的制裁决定。开源组织因为要遵守国际法律影响到了开发过程,但开源软件的使用只要遵守开源许可证并不受此影响。

我想开源社区要排除政治因素干扰的措施可以有:

1. 基金会尽可能注册在比较中立的国家,当某一个国家的法律限制到开源发展时,可以选择遵守该国的法律,还是撤出在该国的组织机构按基金会的理念来发展开源软件。

2. 开源软件的开发过程是公开透明的,任何人都可以对其代码进行审查,并向开源社区提供反馈和建议,这有助于确保开源软件的可靠性和安全性。

3. 多元化的开源社区可以确保开发过程中的多样性和包容性,确保多种声音都能被听到。例如,贝加尔湖电子公司提交的CPU使能特性没有被收录到官方的Linux内核中,贝加尔湖电子公司依旧可以维护这个patch和文档,让更多有需要的用户把它用起来。


第十二问:围绕最近很火热的人工智能大模型话题,基于开放数据集训练出来的大模型是否也该开源?框架、数据集和模型在“开源”方面的关系应该是怎么样的?

基于开放数据集训练出来的大模型如果选择开源,它会得到更多的关注,更多的外部贡献者来参与,不断地增加和修正数据集,以及改进模型,会让它自身发展更快、效果更好。同时,它的开源有助于提高人工智能研究的透明度和公正性,推动人工智能技术的广泛应用和快速发展。

在人工智能的开源方面,框架、数据集和模型都非常重要而且紧密联系的,框架是执行任务的引擎,模型是数据处理的表示搭建在框架之上,数据集是训练出高质量模型的基础。打一个粗浅的比方,框架是引擎,模型是飞行器的设计,数据集是燃料,三者加在一起让飞行器飞上天。三个领域都有非常多的开源项目,框架和数据集的开源项目数不胜数,模型领域也有国外的Hugging Face和国内的ModelScope。

数据是大模型要获得更好效果最为关键的,现在训练ChatGPT的文本大部分都取自互联网上的公开数据,还有一部分是受雇于OpenAI的外包人员给的反馈数据;实际上更多的数据还在人们的头脑和经验中并没有表达出来,受雇的外包人员是有限的,他们的知识和经验也是有限的。所以,我相信未来更好的大语言模型整体应该是开源的,服务针对个人在一般使用量情况下是免费的,这样更多的人们因为其公益目的愿意为其贡献数据和完善模型等,就像人们共同打造维基百科一样。


第十三问:评估商业产品使用开源组件的标准和因素是什么?开源组件版本归一、开源社区持续发布版本、使用最新开源组件版本这些要求是否合理?

评估商业产品使用开源组件的标准和因素有开源许可证、开源组件的可靠性和稳定性、安全性、社区活跃度与生态、服务支持等:

开源许可证:商业产品需要遵守开源组件的许可证,以确保在使用开源组件的过程中合法合规。

开源组件的可靠性和稳定性:开源组件的可靠性和稳定性是选择的重要因素,以确保商业产品的稳定性和可靠性。

开源组件的安全性:商业产品需要考虑开源组件的安全性,开源组件的安全记录是良好的,若有漏洞,能快速修复。

开源社区的活跃度与生态:开源社区比较活跃地开发开源组件,它的未来发展是有保证的,生态中有更多工具可以使用则更好。

开源组件的维护和支持:商业产品需要考虑开源组件的维护和支持情况,若碰到问题,能得到及时的支持。

关于第二个问题视商业产品使用的情况来定。一般来说,持续升级到最新开源组件版本可以获得新功能或修复缺陷等,当然升级需要花费时间,新版本可能存在未知的风险,解决办法就是跟着社区持续升级。在特殊情况下,商业产品使用非常稳定,也没有新的需求,可以保持所有的版本不动。


开源社区中的技术贡献


第十四问:社区技术工作的核心交付件有哪些?如何合理评价和衡量开源社区中从事技术工作(技术大拿)的技术贡献?

社区技术工作的核心交付件主要有这些:

文档:文档是首当其冲的,需要清晰描述开源项目要解决的问题、架构设计和里面的取舍点、工作原理等,还有QuickStart文档和使用教程,以及包括各种应用情形的使用文档等。人们是从文档上开始了解项目的。

代码开发和维护: 社区成员通过开发和维护代码来实现项目的功能,这包括代码的编写和测试、bug修复。

社区支持: 社区成员通过提供技术支持、解答问题等方式来帮助用户更好地使用项目,跟用户互动了解新的应用场景和需求,这也是开源软件改进产品的最好机会。

很难量化评价社区中大拿的技术贡献,有一些维度指标仅供参考,如文档、代码量、代码质量、社区支持等,可以衡量社区成员的相对贡献度,最关键是大家要合力把开源项目做得更好,构建繁荣的社区,这样每个人的贡献才有价值。


第十五问:如何培养开源社区中的技术人员并提升他们的专业能力?他们一般需要怎么样的素质模型?相对普通软件技术人员,哪些能力亟需提升?

要培养开源社区中的技术人员并提升他们的专业能力,比较好的方法是组织学习和交流,开源项目内技术人员相互分享和学习,开源项目间技术人员相互分享和学习,可以搞线下开源Meetup会议,大家交流开源运营的经验、解决用户问题、成长和心得等,鼓励成为社区的积极贡献者。

在开源开发中,技术人员需要直接面对用户,倾听用户的问题和需求,帮助用户解决问题,需要很好的沟通能力;开发中需要多名技术人员和外部贡献者协作,需要良好的团队协作能力;开源项目任务都不是外部安排的,需要技术人员能自我驱动和自我学习能力。所以,相对于普通软件技术人员,开源社区技术人员需要更加注重沟通和协作能力的培养,以及自我驱动和学习能力的提升。


作者介绍:
章文嵩博士,CCF会士,开源项目LVS(Linux Virtual Server)创始人。现在主要做云原生创业孵化与投资,也是CCF常务理事和CCF开源发展委员会副主任。曾任高瓴运营合伙人、滴滴出行高级副总裁、阿里副总裁和阿里云CTO、TelTel联合创始人、国防科技大学计算机学院副教授。他在设计和架构大规模系统、云计算、大数据、软件研发管理上有着丰富的经验。1998年5月创立LVS开源项目,LVS代码从2003年开始一直在官方内核中,在全世界得到广泛应用。过去二十多年,积极推动国内开源的发展。获“CCF杰出工程师奖”,“开源杰出贡献奖”,“中国开源领袖人物”等奖项。
2023中国开源大会将于10月21日—22日在长沙举办,欢迎大家来听章文嵩老师精彩演讲。大会注册地址:https://chinaosc2023.ccf.org.cn/register

推荐阅读:

40% 打工人遇降薪窘境,6% 实现涨薪逆袭,网友:“莫非入职即巅峰了?”

AI 将取代美国 240 万个工作岗位,分析公司 Forrester 最新报告出炉!

Web 浏览器演变史 | GOSIM 数字纪事

继续滑动看下一个

章文嵩:开源释疑十五问

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存